/*
 Free Graphics Engine 
 0.0.1a
 dev.hddisseny
 100510
 Framework completo de la libreria SDL para usar en VC Express 8.
		   Creado por dev.hddisseny - dev.hddisseny@gmail.com 
*/

/**
@mainpage Free Graphics Engine 
@version 0.0.1a
@author dev.hddisseny
@date 100510
@note Framework completo de la libreria SDL para usar en VC Express 8.
	  Creado por dev.hddisseny - dev.hddisseny@gmail.com 
*/

#ifndef FGELIB_H
#define FGELIB_H

#ifdef WIN32
	#pragma comment(lib, "SDL.lib")
	#pragma comment(lib, "SDLmain.lib")
	#pragma comment(lib, "SDL_image.lib")
	#pragma comment(lib, "SDL_mixer.lib")
    #pragma comment(lib, "SDL_gfx.lib")
	#include <SDL.h>
	#include <SDL_image.h>
	#include <SDL_rotozoom.h>
	#include <SDL_mixer.h>
	#include "FGElibDEF.h"
#endif

/**	@brief Clase encargada de el manejo del motor de la libreria.  */
class FGE_Motion 
/**	Con esta clase iniciamos el engine de la  libreria .*/
{
	private:
/* Variable -> __pSurfaceBuffer - La superficie  */
		FGE_Screen * __pSurfaceBuffer;
/* Variable -> __pEventKeyboard - Evento para el teclado  */
		FGE_Status   __pEventKeyboard;
/* Variable -> __iKeyPress - Numero de tecla pulsado  */
		int			 __iKeyPress;
/* Variable -> __pEventMouse - Evento para el Mouse  */
		FGE_Status   __pEventMouse;
/* Variable -> __iButtonPress - Numero de boton pulsado  */
		int          __iButtonPress;
/* Variable -> __iPositionX - Posicion X del raton  */
		int          __iPositionX;
/* Variable -> __iPositionY - Posicion Y del raton  */
		int          __iPositionY;

	public:
/* Metodo -> Init ( void ) - Inicia el engine de la libreria */
		void Init( char* __chTitle );
/* Metodo -> newWindow ( int __x, int __y, int __bpp ); - Crea una ventana nueva */
		FGE_Screen * Window ( int __x, int __y, int __bpp );
/* Metodo -> Surface ( void ); - Devuelve la superficie  */
		FGE_Screen * Surface ( void );
/* Metodo -> Refresh ( void ); - Refresca la superficie  */
		void Refresh ( void );
/* Metodo -> Keyboard ( void ); - Registra los eventos del teclado  */
		int Keyboard ( void );
/* Metodo -> Mouse ( void ); - Registra los eventos del mouse  */
		int Mouse ( void );
};

/**	@brief Clase encargada de el manejo del apartado multimedia de la libreria.  */
class FGE_Media 
/**	Con esta clase manejamos el sistema multimedia de la libreria .*/
{
	private:
/* Variable -> __pImageBuffer - La superficie  */
		FGE_Screen * __pImageBuffer;
/* Variable -> __bImageBox - Los caja donde se dibuja */
		FGE_Box __bImageBox;
/* Variable -> __posX - La posicion X de la superficie */
		int __posX;
/* Variable -> __posY - La posicion y de la superficie */
		int __posY;

	public:
/* Metodo -> LoadImg ( char* __chPath ) - Carga una imagen en la superficie del objeto ( __pImageBuffer )*/
		int LoadImg ( char* __chPath );
/* Metodo -> DrawImage ( int __posX, int __posY, FGE_Screen * __sSurfaceDest ) - Dibuja una imagen en la pantalla */
		void DrawImage ( int __pX, int __pY, FGE_Screen * __sSurfaceDest );
/* Metodo -> SetColorKey ( int __r, int __g, int __b ) - Define el color de transparencia */
		void SetColorKey ( int __r, int __g, int __b );
/* Metodo -> ImgWidth - Devuelve el ancho de la superficie */		
		int ImgWidth ( void );
/* Metodo -> ImgHeight - Devuelve el alto de la superficie */
		int ImgHeight ( void );
/* Metodo -> ImgX - Devuelve la posicion X de la superficie */
		int ImgX ( void );
/* Metodo -> ImgY - Devuelve la posicion y de la superficie */
		int ImgY ( void );
/* Metodo -> Surface - Devuelve la superficie de la imagen */
		FGE_Screen * Surface ( void );
};
#endif